package com.cskaoyan._5exception;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/1 15:12
 **/
/*
> 数组长度为0和数组是null以及数组未初始化，有啥区别？

1. 数组未初始化： 这个数组完全是不可用的，没有初始化的数组毫无意义，一旦使用会编译报错。
2. 数组长度为0和数组为null都是可以使用的，可以认为是经过初始化的，但它们都不是正常数组：
   - 长度为0的数组，只在内存中存在结构但没有存储单元，不能存储任何数据。它的操作中：
     - 直接打印数组名可以获取数组对象的地址。
     - 不能访问任何数组下标，否则都会抛出数组下标越界异常。
     - 输出数组的长度为0
   - 数组为null，表示数组的引用指向了null，数组（对象）无法进行任何操作。
     - 直接打印数组名得到一个null字符串。
     - 不能访问任何数组下标，也不能打印数组长度，都会报空指针异常。
 */
public class Demo4 {
    public static void main(String[] args) {
        // 1. 数组未初始化： 这个数组完全是不可用的，没有初始化的数组毫无意义，一旦使用会编译报错。
        // 只声明没有初始化
        int[] arr1;
        // 编译错误
        // System.out.println(arr1);

        // 长度为0的数组,可以认为是初始化的
        int[] arr2 = {};
        // 可以获取数组长度
        System.out.println("arr2.length = " + arr2.length);
        // 不能通过下标访问元素
        //System.out.println("arr2[0] = " + arr2[0]);

        // 为null的数组, 也可以认为是初始化的
        int[] arr3 = null;
        // 可以直接打印
        System.out.println(arr3);
        // 不能获取长度
        //System.out.println("arr3.length = " + arr3.length);
        // 不能通过下标访问元素
        //System.out.println("arr3[0] = " + arr3[0]);
    }
}
